#include "test.h"

// ��ť���õĻص�����
static void event_btn_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);

    if(code == LV_EVENT_CLICKED) {
        LV_LOG_USER("Clicked");
    } else if(code == LV_EVENT_VALUE_CHANGED) {
        LV_LOG_USER("Toggled");
    }
}

// ʵ�ֹٷ����İ�ť
void lv_hanhan_btn_1(void)
{
    lv_obj_t * label;

    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    lv_obj_add_event_cb(btn1, event_btn_handler, LV_EVENT_ALL, NULL);
    lv_obj_align(btn1, LV_ALIGN_CENTER, -100, -100);

    label = lv_label_create(btn1);
    lv_label_set_text(label, "Button");
    lv_obj_center(label);

    lv_obj_t * btn3 = lv_btn_create(lv_scr_act());
    lv_obj_add_event_cb(btn3, event_btn_handler, LV_EVENT_ALL, NULL);
    lv_obj_align(btn3, LV_ALIGN_CENTER, 100, -100);

    label = lv_label_create(btn3);
    lv_label_set_text(label, "Button2");
    lv_obj_center(label);

    lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
    lv_obj_add_event_cb(btn2, event_btn_handler, LV_EVENT_ALL, NULL);
    lv_obj_align(btn2, LV_ALIGN_CENTER, -100, 100);
    lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);
    lv_obj_set_height(btn2, LV_SIZE_CONTENT);

    label = lv_label_create(btn2);
    lv_label_set_text(label, "Toggle");
    lv_obj_center(label);

    lv_obj_t * btn4 = lv_btn_create(lv_scr_act());
    lv_obj_add_event_cb(btn4, event_btn_handler, LV_EVENT_ALL, NULL);
    lv_obj_align(btn4, LV_ALIGN_CENTER, 100, 100);
    lv_obj_add_flag(btn4, LV_OBJ_FLAG_CHECKABLE);
    lv_obj_set_height(btn4, LV_SIZE_CONTENT);

    label = lv_label_create(btn4);
    lv_label_set_text(label, "Toggle2");
    lv_obj_center(label);
}

// ͼƬ��ť
lv_obj_t * lv_hanhan_imgbtn(int x, int y, int w, int h, char * pic_path)
{
    /*Darken the button when pressed and make it wider*/
    // ���Ӱ�������ʽ����ʹ����һ����̬��Ч��
    static lv_style_t style_pr; // ��ʽ��
    lv_style_init(&style_pr);
    lv_style_set_img_recolor_opa(&style_pr, LV_OPA_30);
    lv_style_set_img_recolor(&style_pr, lv_color_black());
    lv_style_set_transform_height(&style_pr, 20);

    /*Create an image button*/
    lv_obj_t * imgbtn = lv_imgbtn_create(lv_scr_act());
    if(imgbtn == NULL) {
        LV_LOG_ERROR("lv_imgbtn_create fail:"); // ���������ʾ
        return NULL;
    }

    lv_obj_set_size(imgbtn, w, h);
    lv_imgbtn_set_src(imgbtn, LV_IMGBTN_STATE_RELEASED, NULL, pic_path, NULL);
    // lv_obj_add_style(imgbtn1, &style_def, 0);
    lv_obj_add_style(imgbtn, &style_pr, LV_STATE_PRESSED);

    //(x��h����ƫ�Ƶ�λ��)
    lv_obj_align(imgbtn, LV_ALIGN_TOP_LEFT, x, y);

    return imgbtn;
}
// �����Ļص�����
static void video_btn_event_callback(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);

    // �������֮�������������������if�������ʵ��
    if(code == LV_EVENT_CLICKED) {
        printf("200.jpg\n");
        // LV_LOG_USER("Clicked");
    }
}
// ��ʾͼ��ť
void test_btn_image()
{
    // 3.���������д�����������Ƶͼ��(ע�⣺Ҫʹ�ÿ���������ľ���·�� ͼƬ�Ĵ�С��200*200)
    lv_obj_t * video = lv_hanhan_imgbtn(100, 200, 200, 200, "S:/hanhan/images/200.jpg");
    lv_obj_add_event_cb(video, video_btn_event_callback, LV_EVENT_CLICKED, NULL);
}
// ��ʾͼ��ť
void test_btn_image2()
{
    // 3.���������д�����������Ƶͼ��(ע�⣺Ҫʹ�ÿ���������ľ���·�� ͼƬ�Ĵ�С��200*200)
    lv_obj_t * video = lv_hanhan_imgbtn(500, 200, 200, 200, "S:/hanhan/images/200.jpg");
    lv_obj_add_event_cb(video, video_btn_event_callback, LV_EVENT_CLICKED, NULL);
}

// ������ʾ�������κ�͸��ͨ����ͼƬ
void lv_hanhan_image_1(void)
{
#if 1
    /*
        ���ʵ��jpgͼƬ
        ��ʾjpg������(0,0)��λ�÷���һ��200_200.jpgͼ
    */
    // ʵ����һ��img�Ķ���
    lv_obj_t * img1 = lv_img_create(lv_scr_act());
    // ��ͼƬ����lcd(0,0)������λ��
    lv_obj_set_pos(img1, 0, 0);
    // ����ͼƬ��·��(ע��ͼƬ��·��Ҫ�Ϳ����������·��һ��)
    lv_img_set_src(img1, "S:/hanhan/images/img01.jpg");
    printf("show img01.jpg\n");
#endif
}

/*
    gif��̬ͼ��demo
*/
void lv_hanhan_gif_1(void)
{
#if 1
    /*
        ���ʵ��gif��̬ͼ�Ŀؼ�
    */
    // ��ʾgif������(200,0)��λ�÷���һ��gifͼ
    // ʵ����һ��gif�Ķ���
    lv_obj_t * gif1 = lv_gif_create(lv_scr_act());
    // ����gifͼ������λ��
    lv_obj_set_pos(gif1, 0, 0);
    // lv_obj_align(gif1, LV_ALIGN_RIGHT_MID, -20, 0); //����ʼ�����λ������20
    // ����gifͼ��·��
    lv_gif_set_src(gif1, "S:/hanhan/images/milkdragon.gif");
    printf("show gif\n");
#endif
}

// ʵ�ֱ�ǩ�Ĺ�����ʾ
void lv_hanhan_label_3(void)
{
    // ����һ����ǩ
    lv_obj_t * label = lv_label_create(lv_scr_act());
    // ʹ���������ɫ
    lv_label_set_recolor(label, true);
    // �����ı�����
    lv_label_set_text(
        label,
        "#0000ff It is a circularly scrolling "
        "text.dsakjdhaskjdhkjashdkahdakjshdkasjdhjkshdkjawfkglsgjlbkdjwaeklsyedrjfbkgnlyfjkldgfejsklaejk#"); // �����ı���ɫ�ĸ�ʽ

    // ��������Ĵ�С
    lv_obj_set_style_text_font(label, &lv_font_montserrat_30, 0);
    // ���ñ�ǩ�Ŀ���
    lv_obj_set_width(label, 400);
    // ���ñ�ǩ��λ�ã��������������Ͻǣ�������ƫ��10������
    lv_obj_align(label, LV_ALIGN_TOP_LEFT, 200, 240);
    // ���ñ�ǩ��ģʽΪ������ģʽ
    lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/
}

// ��Ϣ��Ļص��������ж���ȷ������ȡ��
static void event_cb(lv_event_t * e)
{
    lv_obj_t * obj = lv_event_get_current_target(e);
    // LV_LOG_USER("Button %s clicked", lv_msgbox_get_active_btn_text(obj));

    char * btn_text = (char *)lv_msgbox_get_active_btn_text(obj);
    if(strcmp(btn_text, "Apply") == 0) {
        // �û������ȷ����ť
        lv_hanhan_gif_1();
        printf("User clicked Apply button\n");
    } else if(strcmp(btn_text, "Close") == 0) {
        // �û������ȡ����ť
        printf("User clicked Close button\n");
    }

    // �����lv_msgbox_get_active_btn_text(obj) == "apply" ��ʾȷ��
    // �����lv_msgbox_get_active_btn_text(obj) == "close" ��ʾ��ȷ��
    // ��strcmp����
}
// ʵ����Ϣ��
void lv_hanhan_msgbox_1(void)
{
    static const char * btns[] = {"Apply", "Close", ""};
    /*
        "Hello"��title��ǩ
        "This is a message box with two buttons."���ı���Ϣ
    */
    lv_obj_t * mbox1 = lv_msgbox_create(NULL, "Hello", "This is a message box with two buttons.", btns, true);
    // ����static void event_cb(lv_event_t * e)����
    lv_obj_add_event_cb(mbox1, event_cb, LV_EVENT_VALUE_CHANGED, NULL);
    lv_obj_center(mbox1);
}




/*********************************list�б�***********************************/
lv_obj_t * list1;

// list�б��Ļص�����
static void event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * obj       = lv_event_get_target(e);
    if(code == LV_EVENT_CLICKED) {
        LV_LOG_USER("Clicked: %s", lv_list_get_btn_text(list1, obj));
    }
}
// ʵ��list�б�
void lv_hanhan_list_1(void)
{
    /*Create a list*/
    list1 = lv_list_create(lv_scr_act());
    lv_obj_set_size(list1, 180, 220);
    lv_obj_center(list1);

    /*Add buttons to the list*/
    lv_obj_t * btn;

    lv_list_add_text(list1, "File");
    btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "New");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_DIRECTORY, "Open");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_SAVE, "Save");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Delete");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_EDIT, "Edit");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);

    lv_list_add_text(list1, "Connectivity");
    btn = lv_list_add_btn(list1, LV_SYMBOL_BLUETOOTH, "Bluetooth");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_GPS, "Navigation");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_USB, "USB");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_BATTERY_FULL, "Battery");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);

    lv_list_add_text(list1, "Exit");
    btn = lv_list_add_btn(list1, LV_SYMBOL_OK, "Apply");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
    btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Close");
    lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
}

// ���̵Ļص�����
static void ta_event_cb(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * ta        = lv_event_get_target(e);
    lv_obj_t * kb        = lv_event_get_user_data(e);
    if(code == LV_EVENT_FOCUSED) {
        lv_keyboard_set_textarea(kb, ta);
        lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
    }

    if(code == LV_EVENT_DEFOCUSED) {
        lv_keyboard_set_textarea(kb, NULL);
        lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
    }
}
// ʵ�ּ�������
void lv_hanhan_keyboard_1(void)
{
    /*Create a keyboard to use it with an of the text areas*/
    lv_obj_t * kb = lv_keyboard_create(lv_scr_act());

    /*Create a text area. The keyboard will write here*/
    lv_obj_t * ta;
    ta = lv_textarea_create(lv_scr_act());
    lv_obj_align(ta, LV_ALIGN_TOP_LEFT, 10, 10);
    lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_ALL, kb);
    lv_textarea_set_placeholder_text(ta, "Hello");
    lv_obj_set_size(ta, 140, 80);

    ta = lv_textarea_create(lv_scr_act());
    lv_obj_align(ta, LV_ALIGN_TOP_RIGHT, -10, 10);
    lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_ALL, kb);
    lv_obj_set_size(ta, 140, 80);

    lv_keyboard_set_textarea(kb, ta);
}





/****************************��ʽ��***********************************/
// ����һ����ʽ��������Ļ�м���ʾһ����ɫ��������
void lv_hanhan_stylesheet_1(void)
{
    lv_obj_t * widget = lv_obj_create(lv_scr_act());
    lv_obj_set_size(widget, 100, 100);
    lv_obj_set_align(widget, LV_ALIGN_CENTER);

    // 1������һ����ʽ����
    static lv_style_t style;
    // 2����ʼ������
    lv_style_init(&style);
    // 3������ʽ���������ñ�����ɫ
    lv_style_set_bg_color(&style, lv_color_hex(0xff0000));
    // 4������ʽ���� ���ӵ�������
    lv_obj_add_style(widget, &style, 0);
}


// ������ʽ���߿�
void lv_hanhan_border_stylesheet_2(void)
{
    // �õ���ǰ��Ļ�Ľ������
    lv_obj_t * parent = lv_scr_act();
    //int width         = lv_obj_get_width(parent);
    //int height        = lv_obj_get_height(parent);

    lv_obj_t * btn1 = lv_btn_create(parent);
    lv_obj_set_size(btn1, 100, 100);

    lv_obj_t * btn2 = lv_btn_create(parent);
    lv_obj_set_size(btn2, 100, 100);
    lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 0);

    // ��ʼ����ʽ
    static lv_style_t style;
    lv_style_init(&style);
    lv_style_set_bg_color(&style, lv_color_hex(0xff0000));
    lv_style_set_border_width(&style, 10);
    lv_style_set_border_color(&style, lv_color_hex(0x00ff00));

    // �����úõ���ʽ��Ч�ڿؼ�
    lv_obj_add_style(btn1, &style, LV_PART_MAIN);
    lv_obj_add_style(btn2, &style, LV_PART_MAIN);
}


// ʹ�ñ�����ʽ����
void lv_hanhan_example_style_2(void)
{
    static lv_style_t style;
    lv_style_init(&style);
    lv_style_set_radius(&style, 5);

    /*Make a gradient*/
    lv_style_set_bg_opa(&style, LV_OPA_COVER);
    lv_style_set_bg_color(&style, lv_palette_lighten(LV_PALETTE_GREY, 1));
    lv_style_set_bg_grad_color(&style, lv_palette_main(LV_PALETTE_BLUE));
    lv_style_set_bg_grad_dir(&style, LV_GRAD_DIR_VER);

    /*Shift the gradient to the bottom*/
    lv_style_set_bg_main_stop(&style, 128);
    lv_style_set_bg_grad_stop(&style, 192);

    /*Create an object with the new style*/
    lv_obj_t * obj = lv_obj_create(lv_scr_act());
    lv_obj_add_style(obj, &style, 0);
    lv_obj_center(obj);
}

// ������ӰЧ��,��ɫ����߿�����ɫ����
void lv_hanhan_example_style_5(void)
{
    static lv_style_t style;
    lv_style_init(&style);

    /*Set a background color and a radius*/
    lv_style_set_radius(&style, 5);
    lv_style_set_bg_opa(&style, LV_OPA_COVER);
    lv_style_set_bg_color(&style, lv_palette_lighten(LV_PALETTE_GREY, 1));

    /*Add a shadow*/
    lv_style_set_shadow_width(&style, 55);
    lv_style_set_shadow_color(&style, lv_palette_main(LV_PALETTE_BLUE));
    //    lv_style_set_shadow_ofs_x(&style, 10);
    //    lv_style_set_shadow_ofs_y(&style, 20);

    /*Create an object with the new style*/
    lv_obj_t * obj = lv_obj_create(lv_scr_act());
    lv_obj_add_style(obj, &style, 0);
    lv_obj_center(obj);
}



// ʹ���Զ������������,��ʾ�ı�,����δ֪ԭ������Ŀǰֻ�ܶ�����main������
static void event_font_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_PRESSED) {
        printf("ok\n");
    }
}

void lv_hanhan_font_test()
{
    // �ڰ���������ʾ���ı�ǩ
    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    lv_obj_set_size(btn1, 200, 200);
    lv_obj_set_pos(btn1, 400, 240);
    lv_obj_add_event_cb(btn1, event_font_handler, LV_EVENT_PRESSED, NULL);

    lv_obj_t * wendu = lv_label_create(btn1);
    lv_obj_align(wendu, LV_ALIGN_CENTER, 0, 0);
    lv_label_set_text(wendu, "你好吗");
    // 20����Ĵ�С
    lv_obj_set_style_text_font(wendu, &chinese_ziku, 0);
    // 20����Ĵ�С����
    // lv_obj_set_style_text_font(wendu, &chinese_ziku, 0);

    // ֱ����ʾ����label��ǩ
    lv_obj_t * label = lv_label_create(lv_scr_act());
    // �����ı�����
    lv_label_set_text(label, "你好世界");
    // ����label�Ĵ�С��
    lv_obj_set_width(label, 300); // ���ÿ���Ϊ100px
    lv_obj_set_height(label, 50); // ���ø߶�Ϊ50px
    // ��������Ĵ�С
    lv_obj_set_style_text_font(label, &chinese_ziku, 0);
    // ���ñ�ǩ��λ��
    lv_obj_set_pos(label, 100, 100);
}




/****************************定时器和按键测试***************************/
// 两个按键测试定时器
lv_timer_t * timer1 = NULL;
void my_timer_1(lv_timer_t * timer)
{
    /*Use the user_data*/
    uint32_t * user_data = timer->user_data;
    printf("my_timer called with user data: %d\n", *user_data);
}

static void event_handler_bnt_11(lv_event_t * e) // 按键1启动定时器
{
    lv_event_code_t code = lv_event_get_code(e);

    if(code == LV_EVENT_PRESSED) {
        printf("ok\n");
        // lv_timer_ready(timer1);  //启动定时器
        lv_timer_resume(timer1); // 恢复定时器
    }
}

static void event_handler_bnt_12(lv_event_t * e) // 按键2暂停定时器
{
    lv_event_code_t code = lv_event_get_code(e);

    if(code == LV_EVENT_PRESSED) {
        printf("no ok\n");
        // lv_timer_del(timer1); //删除定时器
        lv_timer_pause(timer1); // 暂停
    }
}

void timer_button_test()
{
    // 初始化一个定时器(每500ms执行一个函数my_timer_1)
    static uint32_t user_data = 10;
    timer1                    = lv_timer_create(my_timer_1, 500, &user_data);
    lv_timer_pause(timer1); // 暂停(定时器默认是开启的状态,可以先暂停一下)

    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    // 设置按键btn的size大小200*200
    lv_obj_set_size(btn1, 100, 100);
    // 设置按键btn的位置(400,240)
    lv_obj_set_pos(btn1, 600, 100);
    lv_obj_add_event_cb(btn1, event_handler_bnt_11, LV_EVENT_PRESSED, NULL);
    // 显示文字在按键btn上
    lv_obj_t * label1 = lv_label_create(btn1); // 实例化一个标签label对象
    lv_label_set_text(label1, "开定时器");     // 给标签注释
    lv_obj_set_style_text_font(label1, &chinese_ziku, 0);
    lv_obj_center(label1); // 将文本放在按键的中间

    lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
    // 设置按键btn的size大小200*200
    lv_obj_set_size(btn2, 100, 100);
    // 设置按键btn的位置(400,240)
    lv_obj_set_pos(btn2, 600, 300);
    lv_obj_add_event_cb(btn2, event_handler_bnt_12, LV_EVENT_PRESSED, NULL);
    // 显示文字在按键btn上
    lv_obj_t * label2 = lv_label_create(btn2); // 实例化一个标签label对象
    lv_label_set_text(label2, "关定时器");     // 给标签注释
    lv_obj_set_style_text_font(label2, &chinese_ziku, 0);
    lv_obj_center(label2); // 将文本放在按键的中间
}
















